home *** CD-ROM | disk | FTP | other *** search
/ Internet E-Mail Workshop / Internet E-Mail Workshop.iso / info / linp1092. < prev    next >
Text File  |  1993-11-24  |  26KB  |  557 lines

  1.  
  2.     Questions (and their answers) about Linear Programming
  3.     and related topics.
  4. Keywords: FAQ, LP, Linear Programming
  5.  
  6. Archive-name: linear-programming-faq
  7. Last-modified: 1992/10/19
  8. Version: 1.1
  9.  
  10.  
  11.            Linear Programming - Frequently Asked Questions List
  12.                                  (LP-FAQ)
  13.                    Most recent update: October 19, 1992
  14.  
  15. --------------------------------------------------------------------------
  16.  
  17. 1.  "What is Linear Programming?"
  18.  
  19. A:  A linear program (LP) is a problem that can be put into the form
  20.  
  21.     minimize   cx
  22.     subject to Ax=b
  23.                 x>=0
  24.  
  25. where x is a vector to be solved for, A is a matrix of known coefficients,
  26. and c and b are vectors  of known coefficients.  All these entities must
  27. have consistent dimensions, of course, and you can add "transposes" to
  28. taste.  The matrix A is generally not square (hence just doing x=inv(A)*b
  29. is not a solution), and usually has more columns than rows.  Ax=b is
  30. therefore underdetermined, leaving (usually) great latitude in the choice
  31. of x with which to minimize cx.
  32.  
  33. Other formulations can be used in this framework.  For instance, if you
  34. want to maximize instead of minimize, multiply the c vector by -1.  If
  35. you have constraints that are inequalities rather than equations, you
  36. can introduce one new variable (a "slack") for each inequality and treat
  37. the augmented row of the matrix as an equation.  LP codes will often
  38. take care of such "bookkeeping" for you.
  39.  
  40. LP problems are usually solved by a technique known as the Simplex Method,
  41. developed in the 1940's and after.  Briefly stated, this method works by
  42. taking a sequence of square submatrices of A and solving for x, in such a
  43. way that successive solutions always improve, until a point is reached
  44. where no improvement is possible.  A family of LP algorithms known as
  45. Interior Point methods has been developed starting in the 1980's, that
  46. can be faster for many (but so far not all) problems.
  47.  
  48. LP has a variety of uses, in such areas as petroleum, finance, trans-
  49. portation, forestry, and military.
  50.  
  51. --------------------------------------------------------------------------
  52.  
  53. 2.  "Where is there a good code, preferably public domain, to solve
  54. Linear Programming problems?"
  55.  
  56. A:  It depends on the difficulty of your models.  LP technology and
  57. computer technology have both made such great leaps that models that
  58. were previously considered "large" are now routinely solved.  Nowadays,
  59. models with a few thousand constraints, and several thousand variables,
  60. can be tackled with a PC.  Good LP codes on workstations can often
  61. handle models with variables in the tens of thousands, or even greater.
  62. It's hard to be specific about sizes and speed, a priori, due to the
  63. wide variation in things like model structure and difficulty in fac-
  64. torizing the basis matrices.
  65.  
  66. There is a recently released public domain code called "lp_solve" that
  67. is available on Usenet in the "comp.sources.reviewed" newsgroup.  Its
  68. author claims to have solved models with up to 30,000 variables and
  69. 50,000 constraints.  My own experience with this code is not quite so
  70. uniformly optimistic; still, for someone who isn't sure just what kind
  71. of LP code is needed, it represents a very reasonable first try, and the
  72. price is right.  That program is archived at anonymous ftp site
  73. "ftp.uu.net", in directory "/usenet/comp.sources.reviewed/volume02/lp_solve".
  74.  
  75. For MS-DOS PC users, Prof. Timo Salmi at the University of Vaasa in
  76. Finland offers a code called "tslin".  You should be able to access it by
  77. ftp at garbo.uwasa.fi in directory /pc/ts, or else I suggest contacting
  78. Prof. Salmi at ts@uwasa.fi.
  79.  
  80. The consensus is that the LP code published in Numerical Recipes is not at
  81. all strong, and should be avoided for heavy-duty use.  If your requirement
  82. is for a solver that can handle 100-variable models, it might be okay.
  83.  
  84. There is an ACM TOMS routine for LP, #552, available from the netlib server,
  85. in directory /netlib/toms.  See the section on test models for detail on
  86. how to use this server.
  87.  
  88. If your models prove to be too difficult for free software to handle,
  89. then you can consider acquiring a commercial LP code.  There are dozens
  90. of such codes on the market. I have my own opinions, but for reasons of
  91. space, generality and fairness, I will not attempt even to list the codes
  92. I know of here.  Instead I refer you to the annual survey of LP software
  93. published in "OR/MS Today", a joint publication of ORSA (Operations
  94. Research Society of America) and TIMS (The Institute of Management
  95. Science).  I think it's likely that you can find a copy of the June, 1992
  96. issue, either through a library, or by contacting a member of these two
  97. organizations (most universities probably have several members among the
  98. faculty and student body).  The survey lists almost fifty actively marketed
  99. products.  This publication also carries advertisements for many of these
  100. products, which may give you additional information to help make a decision.
  101.  
  102. If you have access to one of the math libraries, such as IMSL or NAG, you
  103. may be able to use an LP routine from there.
  104.  
  105. There are many considerations in selecting an LP code.  Speed is important,
  106. but LP is complex enough that different codes go faster on different models;
  107. you won't find a "Consumer Reports" 8v)  article to say with certainty which
  108. code is THE fastest.  I usually suggest getting benchmark results for your
  109. particular type of model if speed is paramount to you.  Benchmarking may
  110. also help determine whether a given code has sufficient numerical stability
  111. for your kind of models.
  112.  
  113. Other questions you should answer: Can you use a stand-alone code, or do
  114. you need a code that can be used as a callable library, or do you require
  115. source code?  Do you want the flexibility of a code that runs on many
  116. platforms and/or operating systems, or do you want code that's tuned to
  117. your particular hardware architecture (in which case your hardware vendor
  118. may have suggestions)?  Is the choice of algorithm (Simplex, Interior
  119. Point) important to you?  Do you need an interface to a spreadsheet
  120. program?  Is the purchase price an overriding concern?  Is the software
  121. offered at an academic discount (assuming you are at a university)?  How
  122. much hotline support do you think you'll need?
  123.  
  124. It may not always be true that "you get what you pay for," but it is rare
  125. that you get more than you pay for.  8v)   There is usually a large
  126. difference in LP codes, in performance (speed, numerical stability,
  127. adaptability to computer architectures) and features, as you climb the
  128. price scale.  If a code seems overpriced to you, you may not yet
  129. understand all of its features.
  130.  
  131. --------------------------------------------------------------------------
  132.  
  133. 3.  "Oh, and we also want to solve it as an integer program. I think
  134. there will be only a few thousand variables or so."
  135.  
  136. A:  Hmmmm.  You want
  137.     - Nontrivial model size
  138.     - Integer solutions
  139.     - Public domain code
  140. Pick one or maybe two of the above.  You can't have all three.  8v)
  141.  
  142. Integer LP models are ones where the answers must not take fractional
  143. values.  It may not be obvious that this is a VERY much harder problem
  144. than ordinary LP, but it is nonetheless true.  Integer models may be
  145. ones where only some of the variables are to be integer and others may
  146. be real-valued (termed "Mixed Integer LP" or MILP, or "Mixed Integer
  147. Programs" or MIP), or they may be ones where all the variables must be
  148. integral (termed "Integer LP" or ILP).  The class of ILP is often further
  149. subdivided into problems where the only legal values are {0,1} ("Binary"
  150. or "Zero-One" ILP), and general integer problems.  For the sake of
  151. generality, the Integer LP problem will be referred to here as MIP,
  152. since the other classes can be viewed as special cases of MIP.
  153.  
  154. You should be prepared to solve far smaller MIP models than the
  155. corresponding LP model, given a certain amount of time you wish to
  156. allow (unless you and your model happen to be very lucky). There exist
  157. models that are considered challenging, with mere hundreds of variables.
  158. Conversely, some models with tens of thousands of variables solve
  159. readily.  It all depends, and the best explanations of "why" always
  160. seem to happen after the fact.  8v)
  161.  
  162. One exception to this gloomy outlook is that there are certain models
  163. whose LP solution always turns out to be integer.  Best known of these
  164. are the so-called Transportation Problem, Assignment Problem, and
  165. Network-Flow Problem.  It turns out that these problems are best solved
  166. by specialized routines that take major shortcuts in the Simplex Method,
  167. and as a result are relatively quick running.  See the section on
  168. references for a book by Kennington and Helgason, which contains some
  169. source code for Netflo.  Netflo is available by anonymous ftp at
  170. dimacs.rutgers.edu, in directory /pub/netflow/mincost/solver-1, but
  171. I don't know the copyright situation (I used to think you had to buy
  172. the book to get the code).
  173.  
  174. People are sometimes surprised to learn that integer problems are solved
  175. using floating point arithmetic.  Although various algorithms for MIP
  176. have been studied, most if not all available general purpose large-scale
  177. LP codes use a method called "Branch and Bound" to try to find an optimal
  178. solution.  In a nutshell, B&B solves MIP by solving a sequence of related
  179. LP models.  Good codes for MIP distinguish themselves more by solving
  180. shorter sequences of LP's, than by solving the individual LP's faster.
  181. Even moreso than with regular LP, a costly commercial code may prove its
  182. value to you if your MIP model is difficult.
  183.  
  184. As a point of interest, the Simplex Method currently retains an advantage
  185. over the newer Interior Point methods for solving these sequences of LP's.
  186.  
  187. The public domain code "lp_solve", mentioned above, accepts MIP models,
  188. as do a large proportion of the commercial LP codes in the OR/MS Today
  189. survey.  I have seen mention made of algorithm 333 in the Collected
  190. Algorithms from CACM, though I'd be surprised if it was robust enough
  191. to solve large models.
  192.  
  193.  
  194. The better MIP codes have numerous parameters and options to give the user
  195. control over the solution strategy. Most have the capability of stopping
  196. before an optimum is proved, printing the best answer obtained so far.
  197. For many MIP models, stopping early is a practical necessity. Fortunately,
  198. a solution that has been proved by the algorithm to be within, say, 1% of
  199. optimality often turns out to be the true optimum, and the bulk of the
  200. computation time is spent proving the optimality. For many modeling
  201. situations, a near-optimal solution is acceptable anyway.
  202.  
  203. Once one accepts that large MIP models are not typically solved to a
  204. proved optimal solution, that opens up a broad area of approximate
  205. methods, probabilistic methods and heuristics, as well as modifications
  206. to B&B.  Claims have been made for Genetic Algorithms and Simulated
  207. Annealing, though (IMHO) these successes have been problem dependent
  208. and difficult to generalize.  (A reference for GA is David Goldberg,
  209. "Genetic Algorithms in Machine Learning.")  When trying to solve a
  210. difficult MIP model, it is usually crucial to understand the workings
  211. of whatever it is you are modeling, and try to find some insight that
  212. will assist your chosen algorithm to work better.  A related observation
  213. is that the way you formulate your model can be as important as the actual
  214. choice of solver.  You should consider getting some assistance if this
  215. is your first time trying to solve a large (>100 variable) problem.
  216.  
  217. --------------------------------------------------------------------------
  218.  
  219. 4.  "I've written my own optimization code.  How can I test it?"
  220.  
  221. A:  In light of the comments above, I hope your aims are fairly modest,
  222. for there are already a lot of good codes out there.  I hope your LP
  223. code makes use of sparse matrix techniques, rather than using a tableau
  224. form of the Simplex method, because the latter usually ends up being
  225. numerically unstable and very slow.
  226.  
  227. If you want to try out your code on some real-world LP models, there is
  228. a very nice collection of small-to-medium-size ones on netlib.  If you
  229. have ftp access, you can try "ftp research.att.com", using "netlib"
  230. as the Name, and your email address as the password. Do a "cd lp/data"
  231. and look around. There should be a "readme" file, which you would
  232. want to look at first.  Alternatively, you can reach an e-mail
  233. server via "netlib@ornl.gov", to which you can send a message saying
  234. "send index from lp/data"; follow the instructions you receive.
  235.  
  236. The Netlib LP files (after you uncompress them) are in a format called
  237. MPS, which is described in the section below.
  238.  
  239. There is a collection of MIP models, housed at Rice University.  Send
  240. an email message containing "send catalog" to softlib@rice.edu, to get
  241. started.
  242.  
  243. There is a collection of network-flow codes and models at DIMACS (Rutgers
  244. University).  Use anonymous FTP at dimacs.rutgers.edu.  Start looking in
  245. /pub/netflow.  Another network generator is called NETGEN and is available
  246. on netlib (lp/generators).
  247.  
  248. John Beasley has posted information on his OR-Lib, which contains various
  249. optimization test problems.  Send e-mail to umtsk99@vaxa.cc.imperial.ac.uk
  250. to get started.  Or have a look in the Journal of the Operational Research
  251. Society, Volume 41, Number 11, Pages 1069-72.
  252.  
  253. There are various test sets for NLP (Non-Linear Programming).  Among
  254. those I've seen mentioned are
  255.   - ACM TOMS (Transactions on Mathematical Software), V13 No3 P272
  256.   - Publications (listed in another section of this list) by Schittkowski;
  257.     Hock & Schittkowski;  Floudas & Pardalos; Torn; Hughes & Grawiog.
  258. Many of the other references also contain various problems that you
  259. could use to test a code.
  260.  
  261. The modelling language GAMS comes with about 100 test models, which
  262. you might be able to test your code with.
  263.  
  264. --------------------------------------------------------------------------
  265.  
  266. 5.  "What is MPS format?"
  267.  
  268. A:  MPS format was named after an early IBM LP product and has emerged
  269. as a de facto standard ASCII medium among most of the various commercial
  270. LP codes.  You will need to write your own reader routine for this, but
  271. it's not too hard. The main things to know about MPS format are that it
  272. is column oriented (as opposed to entering the model as equations), and
  273. everything (variables, rows, etc.) gets a name.  MPS format is described
  274. in more detail in Murtagh's book, referenced in another section.  Here
  275. is a little sample model, explained in more detail below:
  276.  
  277. NAME          METALS
  278. ROWS
  279.   N VALUE
  280.   E YIELD
  281.   L FE
  282.   L MN
  283.   L CU
  284.   L MG
  285.   G AL
  286.   L SI
  287. COLUMNS
  288.     BIN1      VALUE       0.03         YIELD           1.
  289.     BIN1      FE          0.15         CU             .03
  290.     BIN1      MN          0.02         MG             .02
  291.     BIN1      AL          0.7          SI             .02
  292.     BIN2      VALUE       0.08         YIELD           1.
  293.     BIN2      FE           .04         CU             .05
  294.     BIN2      MN           .04         MG             .03
  295.     BIN2      AL           .75         SI             .06
  296.     BIN3      VALUE       0.17         YIELD         1.
  297.     BIN3      FE           .02         CU             .08
  298.     BIN3      MN           .01         AL             .8
  299.     BIN3      SI           .08
  300.     BIN4      VALUE       0.12         YIELD         1.
  301.     BIN4      FE           .04         CU             .02
  302.     BIN4      MN           .02         AL             .75
  303.     BIN4      SI          0.12
  304.     BIN5      VALUE       0.15         YIELD         1.
  305.     BIN5      FE           .02         CU             .06
  306.     BIN5      MN           .02         MG             .01
  307.     BIN5      SI           .02         AL             .8
  308.     ALUM      VALUE       0.21         YIELD         1.
  309.     ALUM      FE           .01         CU             .01
  310.     ALUM      AL           .97         SI             .01
  311.     SILCON    VALUE       0.38         YIELD         1.
  312.     SILCON    FE           .03         SI             .97
  313. RHS
  314.     ALOY1     YIELD        2000.       FE              60.
  315.     ALOY1     CU            100.       MN              40.
  316.     ALOY1     MG             30.       AL            1500.
  317.     ALOY1     SI            300.
  318. BOUNDS
  319.  UP PROD1     BIN1            200.00
  320.  UP PROD1     BIN2            750.00
  321.  LO PROD1     BIN3            400.00
  322.  UP PROD1     BIN3            800.00
  323.  LO PROD1     BIN4            100.00
  324.  UP PROD1     BIN4            700.00
  325.  UP PROD1     BIN5           1500.00
  326. ENDATA
  327.  
  328.  
  329. MPS is an old format, so it is set up as though you were using
  330. punch cards, and is not free format. Fields start in column 1,
  331. 5, 15, 25, 40 and 50.  Sections of an MPS file are marked by
  332. so-called header cards, which are distinguished by their starting
  333. in column 1.  Although it is typical to use upper-case throughout
  334. the file (like I said, MPS has long historical roots), many
  335. MPS-readers will accept mixed-case for anything except the
  336. header cards, and some allow mixed-case anywhere.
  337.  
  338. The NAME card can be anything you want.  The ROWS section defines
  339. the names of all the constraints; entries in column 2 or 3 are E
  340. for equality rows, L for less-than ( <= ) rows, G for greater-than
  341. ( >= ) rows, and N for non- constraining rows (the first of which
  342. would be interpreted as the objective function).
  343.  
  344. The largest part of the file is in the COLUMNS section, which is
  345. the place where the entries of the A-matrix are put.  All entries
  346. for a given column must be placed consecutively, although within
  347. a column the order of the entries (rows) is irrelevant. Rows not
  348. mentioned for a column are assumed to have a coefficient of zero.
  349.  
  350. The RHS section allows one or more right-hand-side vectors to be
  351. defined; most people don't bother having more than one.  In the
  352. above example, its name is ALOY1, and has non-zero values in all
  353. 7 of the constraint rows of the problem.  Rows not mentioned are
  354. assumed to have a right-hand-side of zero.
  355.  
  356. The optional BOUNDS section lets you put lower and upper bounds on
  357. individual variables (no * wildcards, unfortunately), instead of
  358. having to define extra rows in the matrix.  All the bounds that have
  359. a given name in column 5 are taken together as a set.  Variables
  360. not mentioned in a BOUNDS set are taken to be non-negative.  There
  361. is another optional section called RANGES that I won't go into
  362. here. The final card must be the ENDATA, and yes, it is spelled
  363. funny.
  364.  
  365. For comparison, here is the same model written out in equation
  366. format.
  367.  
  368. Minimize
  369.  VALUE: 0.03 BIN1 + 0.08 BIN2 + 0.17 BIN3 + 0.12 BIN4 + 0.15 BIN5
  370.  + 0.21 ALUM + 0.38 SILCON
  371. Subject To
  372.  YIELD: BIN1 + BIN2 + BIN3 + BIN4 + BIN5 + ALUM + SILCON  = 2000
  373.  FE:    0.15 BIN1 + 0.04 BIN2 + 0.02 BIN3 + 0.04 BIN4 + 0.02 BIN5
  374.         + 0.01 ALUM + 0.03 SILCON <= 60
  375.  MN:    0.02 BIN1 + 0.04 BIN2 + 0.01 BIN3 + 0.02 BIN4 + 0.02 BIN5
  376.         <= 40
  377.  CU:    0.03 BIN1 + 0.05 BIN2 + 0.08 BIN3 + 0.02 BIN4 + 0.06 BIN5
  378.         + 0.01 ALUM <= 100
  379.  MG:    0.02 BIN1 + 0.03 BIN2 + 0.01 BIN5 <= 30
  380.  AL:    0.7 BIN1 + 0.75 BIN2 + 0.8 BIN3 + 0.75 BIN4 + 0.8 BIN5
  381.         + 0.97 ALUM >= 1500
  382.  SI:    0.02 BIN1 + 0.06 BIN2 + 0.08 BIN3 + 0.12 BIN4 + 0.02 BIN5
  383.  
  384.         + 0.01 ALUM + 0.97 SILCON <= 300
  385. and
  386.         0 <= BIN1 <= 200
  387.         0 <= BIN2 <= 750
  388.         400 <= BIN3 <= 800
  389.         100 <= BIN4 <= 700
  390.         0 <= BIN5 <= 1500
  391.  
  392. --------------------------------------------------------------------------
  393.  
  394. 6.  "What software is there for non-linear optimization?"
  395.  
  396. A:  I don't claim as much expertise in this area, but the question is
  397. frequent enough to be worth addressing.  If I get enough feedback, this
  398. section might grow large enough to need to be split off as a separate
  399. FAQ list.
  400.  
  401. It's unrealistic to expect to find one general NLP code that's going to
  402. work for every kind of nonlinear model.  Instead, you should try to find
  403. a code that fits the problem you are solving.  Nonlinear solution techniques
  404. can be divided into various categories, such as unconstrained, linearly
  405. constrained, convexly constrained, or general.  If your problem doesn't
  406. fit in any category except "general", you should be prepared to have to
  407. use a method that boils down to exhaustive search, i.e., you have an
  408. intractable problem (see the comments in the MIP section on Simulated
  409. Annealing and Genetic Algorithms).
  410.  
  411. Several of the commercial LP codes referenced above have specialized
  412. routines, particularly for Quadratic Programming (linear constraints
  413. with a quadratic objective function).  Many nonlinear problems can be
  414. solved by application of a sequence of LP or QP approximations.
  415.  
  416. There is an ACM TOMS routine for QP, #587, available from the netlib server,
  417. in directory /netlib/toms.  See the section on test models for detail on
  418. how to use this server.
  419.  
  420. Here is a summary of codes mentioned in newsgroups in the past year, not
  421. sorted into categories.
  422.  
  423. NPSOL - Stanford University, Office of Technology Licensing, 415-723-0651.
  424.  
  425. MINOS - Stanford University, Office of Technology Licensing, 415-723-0651.
  426.  
  427. NAG Library routine E04UCF.
  428.  
  429. IMSL routine UMINF and UMIDH.
  430.  
  431. Harwell Library routine VF04.
  432.  
  433. Hooke and Jeeves algorithm - reference?
  434.  
  435. MINPAK I and II - Contact Steve Wright, wright@mcs.anl.gov
  436.  
  437. GENOCOP - Zbigniew Michalewicz, zbyszek@mosaic.uncc.edu
  438.  
  439. DFPMIN - Numerical Recipes  (Davidon-Fletcher-Powell)
  440.  
  441. Amoeba - Numerical Recipes
  442.  
  443. Brent's Method - Numerical Recipes
  444.  
  445. FSQP -  Contact Andre Tits, andre@src.umd.edu
  446.  
  447. CONMIN - Vanderplaats and Associates, Goleta CA
  448.  
  449. NOVA - DOT Products, Houston TX
  450.  
  451. GRG2 - Leon Lasdon, University of Texas, Austin TX
  452.  
  453. --------------------------------------------------------------------------
  454.  
  455. 7.  "What references are there on optimization?"
  456.  
  457. A:  Too many to count.  Here are a few that I like or have been
  458. recommended on the net (I have *not* reviewed them all):
  459.  
  460. Bazaraa & Shetty, Nonlinear Programming, Theory & Applications.
  461.  
  462. Coleman & Li, Large Scale Numerical Optimization, SIAM Books.
  463.  
  464. Dennis & Schnabel, Numerical Methods for Unconstrained Optimization
  465. and Nonlinear Equations, Prentice Hall.
  466.  
  467. Fiacco & McCormick, Sequential Unconstrained Minimization Techniques,
  468. SIAM Books.
  469.  
  470. Fletcher, R., Practical Methods of Optimization, Wiley 1987.
  471.  
  472. Floudas & Pardalos, A collection of test problems for constrained
  473. optimization algorithms, Springer-Verlag, 1990.
  474.  
  475. Forsythe, Malcolm & Moler, Computer Methods for Mathematical
  476. Computations, Prentice-Hall.
  477.  
  478. Gill, Murray & Wright, Practical Optimization, Academic Press.
  479.  
  480. Hock & Schittkowski, Test Examples for Nonlinear Programming Codes,
  481. Springer-Verlag, 1981.
  482.  
  483. Hughes & Grawiog, Linear Programming: An Emphasis on Decision Making,
  484. Addison-Wesley, 1973.
  485.  
  486. Kahaner, Moler & Nash, Numerical Methods and Software, Prentice-Hall.
  487.  
  488. Kennington & Helgason, Algorithms for Network Programming, Wiley, 1980.
  489.  
  490. Kirkpatrick, Gelatt & Vecchi, Optimization by Simulated Annealing,
  491. Science, 220 (4598) 671-680 (1983).
  492.  
  493. Luenberger, Linear and Nonlinear Programming, Addison Wesley.
  494.  
  495. More, "Numerical Solution of Bound Constrained Problems", in Computational
  496. Techniques & Applications, CTAC-87, Noye & Fletcher (eds), North-Holland,
  497. 29-37 (1988).
  498.  
  499. More & Toraldo, Algorithms for Bound Constrained Quadratic Programming
  500. Problems, Numerische Mathematik 55, 377-400, 1989.
  501.  
  502. Murtagh, B., Advanced Linear Programming, McGraw-Hill, 1981.
  503.  
  504. Nemhauser, Rinnooy Kan, & Todd (eds), Optimization, North-Holland, 1989.
  505.  
  506. Press, Flannery, Teukolsky & Vetterling , Numerical Recipes, Cambridge,
  507. 1986.    (Comment: use with care.)
  508.  
  509. Schittkowski, Nonlinear Programming Codes, Springer-Verlag, 1980.
  510.  
  511. Torn & Zilinskas, Global Optimization, Springer-Verlag, 1989.
  512.  
  513. Williams, H.P., Model Building in Mathematical Programming, Wiley 1985.
  514.  
  515. --------------------------------------------------------------------------
  516. 8.  "Who maintains this list?"
  517.  
  518. A:  John W. Gregory
  519.     LP Specialist  (it says that on my business card, it must be true!)
  520.     Applications Department
  521.     Cray Research, Inc.
  522.     Eagan, MN 55121   USA
  523.     jwg@cray.com
  524.     612-683-3673
  525.  
  526. I suppose I should say something here to the effect that "the material
  527. in this document does not reflect any official position taken by Cray
  528. Research, Inc."  Also, "use at your own risk", "no endorsement of products
  529. mentioned", etc., etc.  I probably should have scattered more "IMHO"s
  530. around in the text, but that acronym seems weaselly and once you start it's
  531. hard to know where to stop.  I should have put in a few more smilies here
  532. and there too, to assist the humor impaired - be on your toes.  8v)
  533.  
  534. I've tried to keep my own biases (primarily, toward the high end of
  535. computing) from dominating what I write here, and other viewpoints that
  536. I've missed are welcome.  Suggestions, corrections, topics you'd like to
  537. see covered, and additional material (particularly on NLP) are solicited.
  538. Comments to the effect "who died and made *you* optimal?" will likely
  539. result in you getting stuck with maintaining the FAQL instead of me.  8v)
  540.  
  541. I regret that when I started this list I didn't keep careful track of all
  542. the contributors whose knowledge I tapped.  In several instances, the
  543. information herein comes from postings on the net, which I assumed to be
  544. fair use and in the public domain.  It being too late now to make individual
  545. acknowledgements, I offer a blanket THANKS to all who have posted on these
  546. topics to the net.
  547.  
  548. This FAQL is also being posted to news.answers, which is archived
  549. in the periodic posting archive on pit-manager.mit.edu [18.172.1.27],
  550. in the anonymous ftp directory /pub/usenet/news.answers.
  551.  
  552. Copies of this FAQL may be made freely, as long as it is distributed at
  553. no charge and with this disclaimer included.
  554.  
  555. --------------------------------------------------------------------------
  556.  
  557.